package org.dromara.oce.domain.req;

import com.bytedance.ads.model.*;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.oce.domain.base.OceBaseReq;

import java.math.BigDecimal;
import java.util.List;

/**
 * @desc: https://open.oceanengine.com/labels/34/docs/1757798123491403?origin=left_nav
 * @author: cx
 * @date：2025/6/5 10:11
 */
@Data
public class ProjectCreateV30Request2 extends OceBaseReq {

    /**
     * 项目id，后端传值使用
     */
    private Long projectId;

    /**
     * 项目状态，允许值: ENABLE开启（默认值）,DISABLE关闭
     */
    private ProjectCreateV30Operation operation = ProjectCreateV30Operation.ENABLE;

    /**
     * 投放模式: MANUAL手动投放(默认值）、PROCEDURAL自动投放
     * 自动投放支持的landing_type：APP应用推广、MICRO_GAME小程序、LINK销售线索推广、SHOP电商店铺推广、QUICK_APP快应用
     * 搜索广告无需再表达delivery_mode参数，表达不生效，可通过delivery_type选择「常规投放」或「极速智投」，「极速智投」默认为自动投放模式
     * 当marketing_goal= LIVE直播时，已支持MANUAL手动投放、PROCEDURAL自动投放
     */
    private ProjectCreateV30DeliveryMode deliveryMode = ProjectCreateV30DeliveryMode.PROCEDURAL;

    /**
     * 项目名称，长度是1-50个字（两个英文字符占1个字）
     */
    @NotNull
    private String name;

    /**
     * 推广目的- MICRO_GAME:小程序
     * APP 应用推广
     * LINK 销售线索推广
     * MICRO_GAME 小程序
     * SHOP 电商店铺推广
     * QUICK_APP快应用
     * NATIVE_ACTION 原生互动
     * DPA商品目录，投放搜索蓝海项目时不支持DPA目的
     */
    private ProjectCreateV30LandingType landingType = ProjectCreateV30LandingType.MICRO_GAME;

    /**
     * 营销场景，允许值：
     * VIDEO_AND_IMAGE-短视频/图片
     * LIVE-直播
     */
    @NotNull(message = "营销场景不能为空")
    private ProjectCreateV30MarketingGoal marketingGoal = ProjectCreateV30MarketingGoal.VIDEO_AND_IMAGE;

    /**
     * 广告类型，允许值：
     * ALL 通投广告
     * SEARCH 搜索
     * <p>
     * 当 marketing_goal=LIVE直播时，仅支持ALL通投广告
     * 仅当landing_type=APP/LINK/NATIVE_ACTION/SHOP&&delivery_mode=MANUAL时支持搜索广告，否则报错
     * 当landing_type=QUICK_APP快应用 / MICRO_GAME小程序 && delivery_mode = PROCEDURAL自动投放时，仅支持ALL通投广告
     * 仅当ad_type=ALL 通投广告时，支持inventory_type=INVENTORY_HOMED_AGGREGATE住小帮
     */
    private ProjectCreateV30AdType adType = ProjectCreateV30AdType.ALL;

    /**
     * 投放类型，不传默认为NORMAL常规投放，允许值：
     * NORMAL 常规投放（默认值）
     * DURATION极速智投（仅支持搜索广告，ad_type = SEARCH）
     */
    private ProjectCreateV30DeliveryType deliveryType = ProjectCreateV30DeliveryType.NORMAL;


    /**
     * 出价系数，出价系数可通过【获取快投推荐出价系数】查询，小数点后最多两位,取值范围 [1.00,2.00]
     */
    private BigDecimal searchBidRatio;

    /**
     * 定向拓展，允许值：ON:开启（默认值）， OFF:关闭
     * 不传表示开启定向拓展，若需关闭，请传入该参数并设置为OFF
     * 创建搜索蓝海项目时，不支持搜索快投
     */
    private String audienceExtend;



    /**
     * 智能AI创意开关，允许值：
     * ON 开启
     * OFF 关闭（默认值）
     */
    private String aigcDynamicCreativeSwitch = ProjectCreateV30AigcDynamicCreativeSwitch.OFF.getValue();



    //===================商品========================
    /**
     * 关联产品投放相关参数
     * productSetting :商品库设置 允许值：SINGLE 启用sDPA、NO_MAP不启用（默认值）、MULTI_PRODUCTS多品投放new
     * productPlatformId 商品库ID
     * productId 产品/商品ID
     */
    private ProjectCreateV30RequestRelatedProduct relatedProduct;


    //==================推广产品与投放载体========================
    /**
     * 小程序类型，仅当landing_type = MICRO_GAME 时有效且必填，允许值：
     * WECHAT_GAME 微信小游戏
     * WECHAT_APP微信小程序
     * BYTE_GAME字节小游戏
     * BYTE_APP字节小程序
     * AWEME抖音号
     */
    private ProjectCreateV30MicroPromotionType microPromotionType;

    /**
     * 微信、字节小程序/小游戏资产id
     */
    private Long microAppInstanceId;


    //==================优化目标========================
    /**
     * 优化目标
     * externalAction 优化目标 AD_CONVERT_TYPE_PAY:付费 。。。。
     * deepExternalAction 深度转化目标  AD_CONVERT_TYPE_PURCHASE_ROI：付费ROI ...
     */
    private ProjectCreateV30RequestOptimizeGoal optimizeGoal;


    //==================投放版位========================
    /**
     * 广告版位
     * {
     *      "inventoryCatalog":   MANUAL-首选媒体；UNIVERSAL_SMART-通投智选；
     * }
     */
    private ProjectCreateV30RequestDeliveryRange deliveryRange;


    //==================用户定向========================
    /**
     * 用户定向
     * platform 投放平台列表，不传值为全选 允许值：ANDROID、IOS、HARMONY
     */
    private ProjectCreateV30RequestAudience audience;


    //==================排期、预算、出价========================
    /**
     * 排期、预算、出价
     * scheduleType 投放时间类型，允许值：SCHEDULE_FROM_NOW 从今天起长期投放、SCHEDULE_START_END 设置开始和结束日期、SCHEDULE_7_DAYS 7日稳投new
     * deepBidType 深度优化方式，当转化目标中含有深度转化时，该字段必填 DEEP_BID_MIN自定义手动出价 ROI_COEFFICIENT ROI系数出价
     * bidType 竞价策略  CUSTOM:稳定成本  NO_BID:最大转化投放  UPPER_CONTROL：最优成本
     * budgetMode 项目预算类型， BUDGET_MODE_DAY 日预算
     * budget 项目预算，单位为元 300
     * cpaBid 目标转化出价/预期成本 35
     * roiGoal ROI系数 1.1
     */
    private ProjectCreateV30RequestDeliverySetting deliverySetting;


    //==================监测链接========================
    /**
     * 监测链接
     * actionTrackUrl 有效触点
     */
    private ProjectCreateV30RequestTrackUrlSetting trackUrlSetting;




    /**
     * 广告，后端使用
     */
    private List<CreatePromotionV3Request> promotionList;

}
